const jwt = require("jsonwebtoken");
// 使用环境变量
const secret = process.env.JWT_SECRET || "my_secret_key";
const expiresIn = 12*60*60;//以秒为单位
/**
 * Token 工具类
 * 提供 token 的加密和解密功能
 * @encrypt 加密 token 令牌
 * @decrypt 解密 token 令牌
 */
const Token = {
  /**
   * 生成 token 令牌
   * @param {Object} data - 要加密的数据
   * @returns {string} - 返回生成的 token 字符串
   */
  encrypt: function (data) {
    const token = jwt.sign(data, secret, { expiresIn });
    return token;
  },

  /**
   * 解密 token 令牌
   * @param {string} token - 要解密的 token 字符串
   * @returns {Object} - 返回解密后的数据对象，如果 token 无效或过期，则返回 { token: false, data: null }
   */
  decrypt: function (token) {
    try {
      const decoded = jwt.verify(token, secret);
      const expirationTime = decoded.exp * 1000; // 将秒转换为毫秒
      const currentTime = Date.now();
      if (currentTime > expirationTime) {
        return {
          token: false,
          data: null,
        };
      }
      return {
        token: true,
        id: decoded.id,
        username: decoded.username,
      };
    } catch (e) {
      // Token 解析出错
      return {
        token: false,
        data: null,
      };
    }
  },
};


module.exports = Token;
